현대적인 러스트는 함수형 프로그래밍 원칙을 활용하여 제공합니다 비용이 없는 추상화. 함수를 값으로, 데이터를 불변 스트림으로 취급함으로써, 러스트는 표현력 있는 I/O 연산 성능 훼손 없이 가능하게 합니다.
1. 환경과 클로저
표준 함수와 달리, 클로저는 자신의 환경을 포획할 수 있습니다. 이들은 Fn, FnMut또는 FnOnce _trait를 사용하여 관리합니다 클로저 내 소유권 전달메모리 안전성을 유지할 수 있도록 보장합니다. 함수가 상태를 가질 때도 말이죠.
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter는 지연 평가이며 아직 실행되지 않았습니다!
let v1_iter = v1.iter().map(|x| x + 1);
// v1_iter는 지연 평가이며 아직 실행되지 않았습니다!
2. 선언적 파이프라인
사용함으로써 반복자 어댑터개발자는 복잡한 중첩 반복문을 간결한 로직으로 대체합니다. 그리고 iter_mut 메서드 안전하고 직접적인 기능적 변환을 가능하게 하며, 컴파일러는 이러한 고수준 호출을 수작업으로 작성한 반복문과 동일한 어셈블리 코드로 최적화합니다.
3. 성능 벤치마킹
개발자 프로파일 또는 릴리스 모드로 컴파일될 때, 개발자 프로파일 또는 릴리스 모드에서, search 함수가 효율성을 입증합니다. 통계적 벤치마킹 결과: test bench_search_iter ... 벤치: 19,234,900 나노초/반복. 이는 이러한 추상화가 진정한 '비용 없는' 것임을 확인시켜 줍니다.
⚠️ 컴파일러 경고
경고: 사용하지 않는 `Map`입니다. 반드시 사용해야 합니다. 반복자는 지연 평가되며, .collect() 또는 .sum() 같은 소비 메서드를 호출하지 않으면 아무 일도 하지 않습니다.
collect() 또는 sum().TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>